অপারেটর ওভারলোডিং (Operator Overloading) C++ এ একটি বৈশিষ্ট্য, যা দিয়ে আমরা ইউজার-ডিফাইন্ড ডেটা টাইপের (যেমন, ক্লাস) জন্য সাধারণ অপারেটরগুলোর কাস্টম ব্যবহার সংজ্ঞায়িত করতে পারি। উদাহরণস্বরূপ, +
, -
, *
, ==
ইত্যাদি অপারেটরগুলো সাধারণত প্রাথমিক ডেটা টাইপের উপর কাজ করে, কিন্তু আমরা এগুলোকে কাস্টম অবজেক্টের জন্যও ব্যবহারযোগ্য করতে পারি।
+
অপারেটরকে বিয়োগফলের জন্য ব্যবহার করা যাবে না।int
এবং float
এর মত প্রাথমিক ডেটা টাইপ ব্যবহার করা হয়, তবে সেগুলোর জন্য অপারেটর ওভারলোড করা যাবে না।অপারেটর ওভারলোডিং করার জন্য সাধারণত operator
কীওয়ার্ড ব্যবহার করা হয়। অপারেটরের ডেফিনিশন ক্লাসের সদস্য ফাংশন হিসেবে করা যেতে পারে বা বন্ধু (friend) ফাংশন হিসেবে ডিফাইন করা যেতে পারে।
+
অপারেটর ওভারলোড করে দুটি Complex
অবজেক্ট যোগ করা#include <iostream>
using namespace std;
class Complex {
private:
float real;
float imag;
public:
Complex(float r = 0, float i = 0) : real(r), imag(i) {}
// + অপারেটর ওভারলোড করা
Complex operator + (const Complex &c) {
Complex temp;
temp.real = real + c.real;
temp.imag = imag + c.imag;
return temp;
}
// কমপ্লেক্স সংখ্যা প্রদর্শন
void display() const {
cout << real << " + " << imag << "i" << endl;
}
};
int main() {
Complex c1(3.5, 2.5);
Complex c2(1.5, 3.0);
Complex c3 = c1 + c2; // + অপারেটর ওভারলোড ব্যবহার করে যোগফল নির্ণয়
cout << "Complex number 1: ";
c1.display();
cout << "Complex number 2: ";
c2.display();
cout << "Sum: ";
c3.display();
return 0;
}
বর্ণনা:
Complex
ক্লাসে +
অপারেটর ওভারলোড করা হয়েছে।operator +
ফাংশনটি Complex
অবজেক্ট গ্রহণ করে এবং রিয়েল ও ইমাজিনারি অংশ যোগ করে নতুন Complex
অবজেক্ট ফেরত দেয়।আউটপুট:
Complex number 1: 3.5 + 2.5i
Complex number 2: 1.5 + 3.0i
Sum: 5.0 + 5.5i
==
অপারেটর ওভারলোড করে দুটি Complex
অবজেক্ট তুলনা করা#include <iostream>
using namespace std;
class Complex {
private:
float real;
float imag;
public:
Complex(float r = 0, float i = 0) : real(r), imag(i) {}
// == অপারেটর ওভারলোড করা
bool operator == (const Complex &c) const {
return (real == c.real && imag == c.imag);
}
void display() const {
cout << real << " + " << imag << "i" << endl;
}
};
int main() {
Complex c1(3.5, 2.5);
Complex c2(3.5, 2.5);
Complex c3(1.0, 1.0);
if (c1 == c2) {
cout << "c1 and c2 are equal." << endl;
} else {
cout << "c1 and c2 are not equal." << endl;
}
if (c1 == c3) {
cout << "c1 and c3 are equal." << endl;
} else {
cout << "c1 and c3 are not equal." << endl;
}
return 0;
}
বর্ণনা:
==
অপারেটর ওভারলোড করা হয়েছে, যা দুটি Complex
অবজেক্টের রিয়েল এবং ইমাজিনারি অংশের সমতা যাচাই করে।c1 == c2
এবং c1 == c3
চেক করা হয়েছে।আউটপুট:
c1 and c2 are equal.
c1 and c3 are not equal.
++
অপারেটর ওভারলোড (প্রিফিক্স এবং পোস্টফিক্স)#include <iostream>
using namespace std;
class Counter {
private:
int count;
public:
Counter(int c = 0) : count(c) {}
// প্রিফিক্স ++ অপারেটর ওভারলোড
Counter& operator++() {
++count;
return *this;
}
// পোস্টফিক্স ++ অপারেটর ওভারলোড
Counter operator++(int) {
Counter temp = *this;
count++;
return temp;
}
void display() const {
cout << "Count: " << count << endl;
}
};
int main() {
Counter c1(5);
++c1; // প্রিফিক্স ++
c1.display();
c1++; // পোস্টফিক্স ++
c1.display();
return 0;
}
বর্ণনা:
++
অপারেটর প্রিফিক্স এবং পোস্টফিক্স ফর্মে ওভারলোড করা হয়েছে।++
অপারেটরের জন্য operator++()
মেথড ব্যবহার করা হয়েছে।++
অপারেটরের জন্য operator++(int)
মেথড ব্যবহার করা হয়েছে।আউটপুট:
Count: 6
Count: 7
অপারেটর | উদ্দেশ্য | ওভারলোডিং সম্ভব |
---|---|---|
+ | যোগফল | হ্যাঁ |
- | বিয়োগফল | হ্যাঁ |
* | গুণফল | হ্যাঁ |
== | সমতা যাচাই | হ্যাঁ |
++ | ইনক্রিমেন্ট | হ্যাঁ |
-- | ডিক্রিমেন্ট | হ্যাঁ |
[] | অ্যারের ইন্ডেক্স অ্যাক্সেস | হ্যাঁ |
operator
কীওয়ার্ড ব্যবহার করে সংজ্ঞায়িত করা হয় এবং ক্লাসের মেম্বার বা ফ্রেন্ড ফাংশন হিসেবে ডিফাইন করা যায়।common.read_more